Cert Manager
개요
Cert Manager는 쿠버네티스에서 PKI 인증서를 편하게 관리할 수 있도록 도와주는 애드온이다.
Jetstack에서 개발된 후, 2020년에 CNCF로 기증됐다.
쿠버 내의 통신 간 TLS 통신을 간편하게 할 수 있도록 지원하는 한편, 웹 상에서도 사용할 수 있도록 다양한 백그라운드와 통합하여 설정할 수도 있다.
구성 요소
서트 매니저는 인증서를 발급받는 과정에 정말 충실하게 오브젝트가 구성돼있다.
일단 인증서와 개인키는 전부 기본 오브젝트인 시크릿에 보관되고 관리된다.
이밖에 서트 매니저에서 제공하는 CRD는 다음과 같다.
Issuer & ClusterIssuer
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: ca-issuer
namespace: mesh-system
spec:
# 여러 가지 방법 중 하나를 택해 발행자 역할을 수행할 수 있다.
selfSigned: {}
ca:
secretName: ca-key-pair
acme:
server: https://acme-staging-v02.api.letsencrypt.org/directory
email: user@example.com
privateKeySecretRef:
name: letsencrypt-staging
solvers:
- http01:
ingress:
ingressClassName: nginx
vault:
path: pki_int/sign/example-dot-com
server: https://vault.local
caBundle: <base64 encoded CA Bundle PEM file>
auth:
발행자를 나타내는 오브젝트이다.
스펙에 어떤 필드를 명시하냐에 따라 어떤 발행자인지를 상세 지정할 수 있다.
가령 selfSigned
를 활용하며 루트 CA가 될 것이다.
ca
는 개인키와 인증서가 시크릿에 보관된 이슈어를 말한다.
즉 다른 인증 기관의 하위 인증 기관으로 활용할 때 사용한다.
Certificate
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: my-selfsigned-ca
namespace: sandbox
spec:
isCA: true
commonName: my-selfsigned-ca
secretName: root-secret
privateKey:
algorithm: ECDSA
size: 256
duration: 2160h
renewBefore: 360h
usages:
- server auth
- client auth
issuerRef:
name: selfsigned-issuer
kind: ClusterIssuer
group: cert-manager.io
인증서를 나타내는 오브젝트이다.
이걸 직접 만들면 서트매니저에서 알아서 CertificateRequest라는 오브젝트를 추가적으로 만들어서 명시된 이슈어에 발행 요청을 날린다.
서명된 인증서와 키는 secretName
필드에 명시된 이름의 시크릿을 생성해 저장해줄 것이다.
서트 매니저는 인증서의 갱신과 재발행을 보장해준다.
사용 방법
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: selfsigned-issuer
spec:
selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: my-selfsigned-ca
namespace: sandbox
spec:
isCA: true
commonName: my-selfsigned-ca
secretName: root-secret
privateKey:
algorithm: ECDSA
size: 256
issuerRef:
name: selfsigned-issuer
kind: ClusterIssuer
group: cert-manager.io
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: my-ca-issuer
namespace: sandbox
spec:
ca:
secretName: root-secret
이슈어를 지정하고, 이슈어로부터 인증서를 받고, 이 인증서로부터 다른 이슈어를 만드는 예시이다.
설치
helm repo add jetstack https://charts.jetstack.io --force-update
helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.17.0 \
--set crds.enabled=true
헬름으로 간편하게 설치할 수 있다.
삭제를 할 때는 같이 설치된 CRD를 직접 삭제해주는 것이 좋다.
만약 네임스페이스 삭제가 안 된다면 API Aggregation Layer로 인한 것일 수 있다.
관련 문서
이름 | noteType | created |
---|---|---|
Cert Manager | knowledge | 2025-03-15 |
7W - 이스티오 메시 스케일링 | published | 2025-06-09 |
E-이스티오 메시 스케일링 | topic/explain | 2025-06-08 |
E-istio-csr 사용 실습 | topic/explain | 2025-06-09 |